Integrated circuits are an integral part of any electronic device. A variety of integrated circuits may be used together to enable the operation of an electronic device. While integrated circuits are typically designed for a particular application, one type of integrated circuit which enables flexibility is a programmable logic device (PLD). As will be described in more detail, a programmable logic device is designed to be user-programmable so that users may implement logic designs of their choices. Application specific integrated circuits (ASICs) may also comprise programmable portions which enable the ASIC to function as a PLD. That is, in addition to a fixed hardware design, a programmable logic portion may comprise programmable circuits.
However, as hardware systems have become more complex, capturing their descriptions in a synthesizable language has become a very complex task. Recent efforts to alleviate some of the complexity for designers have resulted in the evolution of computer languages into high-level languages (HLLs). Examples of such HLLs include but are not limited to the C language and all its variants, SystemVerilog, and dataflow languages such as CAL. These HLLs typically allow for complex systems to be described in significantly fewer lines of code, thus allowing the design cycle to be compressed and the time-to-market for the design to be reduced.
However, one drawback to the use of high level languages is the limited correlation between the source code entered by the user and the hardware that is produced. This limited feedback makes it difficult for users of HLL tools to optimize their designs. How a design maps to a specific hardware platform can sometimes only be fully understood by an expert with considerable insight. Further, insight into the types of data processing that is performed, the corresponding logic that controls the data paths and the communication between these block can require in-depth insight into the specific contents of the design.